package com.order.www;
import java.util.ArrayList;
/**
 * Creared with IntelliJ IDEA.
 * Description:小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,
 * 他马上就写出了正确答案是100。但是他并不满足于此,
 * 他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。
 * 没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列?
 * User:yxd
 * Date:2022-02-09
 * Time:13:01
 */
public class Array6 {
    public static void main(String[] args) {
        int sum = 100;
        System.out.println(FindContinuousSequence(sum));
    }

    public static ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {
        int left = 1;
        int right = 2;
        int numbers = 0;
        ArrayList<ArrayList<Integer>> ret = new ArrayList<>();
        while(left < (sum / 2) + 1){//可以让left小于right 也可以这样（减少循环次数）
            numbers = (left + right) * (right - left + 1) / 2;//等差数列求和
            if(sum == numbers){//刚好相等就放入
                ArrayList<Integer> list = new ArrayList<>();
                for(int i = left;i <= right;i ++){
                    list.add(i);
                }
                ret.add(list);
                left ++;//然后再往前走
            }else if(sum > numbers){
                right ++;
            }else{
                left ++;
            }
        }
        return ret;
    }

}
